// ttEmoticons
// version 2 - 2012.11.26
// _nderscore

(function(){
  if(typeof ttEm !== 'undefined') ttEm.cleanup();

  ttEm = {

    el:null,

    btnhover:function(){
      var par = $(this).parent(),
          offs = par.offset(),
          wid = par.width();
      ttEm.el.css({display:'block'})
             .offset({top:(offs.top-234), left:(offs.left+wid-107)});
    },

    addemote:function(){
      var _t = $(this),
          emote = _t.data('emotetxt'),
          target = ttEm.el.data('target');
      target.insertAtCaret(emote).focus();
    },

    install:function(){
      var _t = $(this), _p = _t.parent(),
          btn = $('<div class="ttemotebtn"></div>');
      if(!_t.data('btn')){
        _t.data('btn',btn);
        btn.bind('mouseenter',ttEm.btnhover);
        _p.parent().append(btn);
      }
      ttEm.el.data('target',_t);
    },

    uninstall:function(){
      var _t = $(this),
          btn = _t.data('btn');
      if(btn) {
        btn.remove();
        _t.removeData('btn');
      }
    },

    init:function(){
      $('.message-input').live('focus',ttEm.install).live('blur',ttEm.uninstall);

      $('head').append($('<style id="ttem_css">'+ttEm.css+'</style>'));

      ttEm.el = $('<div id="ttemotpicker"><div>ttEemoticons<br /><span>by _nderscore</span></div><ul></ul></div>').bind('mouseleave',function(){
        $(this).css({display:'none'});
      });

      var ul = ttEm.el.find('ul');

      for(var i = ttEm.emotes.length; i--;){
        var emote = ttEm.emotes[i];
        var item = $('<li>'+util.emojify(emote)+'</li>');
        item.data('emotetxt',emote).bind('click',ttEm.addemote);
        ul.prepend(item);
      }

      $('body').append(ttEm.el);

      if(!$.insertAtCaret) $.fn.extend({
        insertAtCaret: function(myValue){
          return this.each(function(i){
            if(document.selection){
              this.focus();
              var sel = document.selection.createRange();
              sel.text = myValue;
              this.focus();
            } else if(this.selectionStart || this.selectionStart == '0'){
              var startPos = this.selectionStart;
              var endPos = this.selectionEnd;
              var scrollTop = this.scrollTop;
              this.value = this.value.substring(0, startPos)+myValue+this.value.substring(endPos,this.value.length);
              this.focus();
              this.selectionStart = startPos + myValue.length;
              this.selectionEnd = startPos + myValue.length;
              this.scrollTop = scrollTop;
            } else {
              this.value += myValue;
              this.focus();
            }
          })
        }
      });

      console.log('ttEmoticons by _nderscore is loaded!');
    },

    cleanup:function(){
      $('#ttem_css').remove();
      $('.message-input').die('focus',ttEm.install).die('blur',ttEm.uninstall);
      ttEm.el.remove();
      console.log('Cleaned up my mess!');
    },

    css:".ttemotebtn { "+
    "position: absolute; "+
    "bottom: 10px; right:  10px; "+
    "width: 16px; height: 16px; "+
    "background: url('http://s3.amazonaws.com/static.turntable.fm/images/room/emoji.png?v=2') -22px 0 no-repeat;"+
    "opacity: 0.5;"+
    "} "+
    ".ttemotebtn:hover { "+
    "opacity: 1.0; "+
    "} "+
    ".pmContainer .ttemotebtn { "+
    "bottom: 12px; "+
    "} "+
    "#ttemotpicker { "+
    "display: none; "+
    "position: absolute; "+
    "top: 0px; left: 0px;"+
    "width: 105px; height: 231px; "+
    "z-index: 99999; "+
    "border: 1px solid #666; "+
    "border-bottom: 5px solid #EEE; "+
    "-webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; "+
    "background: -webkit-linear-gradient(top,#CCC 0%, #EEE 25%);"+
    "background: -moz-linear-gradient(top,#CCC 0%, #EEE 25%);"+
    "} "+
    "#ttemotpicker ul { "+
    "overflow-y: auto;"+
    "height: 200px;"+
    "list-style: none; "+
    "margin: 0; "+
    "padding: 3px; "+
    "} "+
    "#ttemotpicker li { "+
    "float: left; "+
    "margin: 1px 2px; "+
    "} "+
    "#ttemotpicker li:hover { "+
    "background: #FF3; "+
    "} "+
    "#ttemotpicker > div { "+
    "font-size: 10px; "+
    "line-height: 10px; "+
    "padding: 2px; "+
    "text-align: center;"+
    "background: -moz-linear-gradient(top,#CCC 0,#999 100%); "+
    "background: -webkit-linear-gradient(top,#CCC 0,#999 100%); "+
    "-webkit-border-top-left-radius: 5px; -webkit-border-top-right-radius: 5px;"+
    "-moz-border-radius-topleft: 5px; -moz-border-radius-topright: 5px;"+
    "border-top-left-radius: 5px; border-top-right-radius: 5px;"+
    "border-top: 1px solid #FFF; "+
    "border-bottom: 1px solid #666; "+
    "} "+
    "#ttemotpicker > div > span { "+
    "color: #666;"+
    "} ",

    emotes:[':bowtie:',':smile:',':laughing:',':blush:',':smiley:',':relaxed:',':smirk:',':heart_eyes:',':kissing_heart:',':kissing_closed_eyes:',':flushed:',':relieved:',':satisfied:',':grin:',':wink:',':wink2:',':stuck_out_tongue_winking_eye:',':stuck_out_tongue_closed_eyes:',':grinning:',':kissing:',':kissing_smiling_eyes:',':stuck_out_tongue:',':sleeping:',':worried:',':frowning:',':anguished:',':open_mouth:',':grimacing:',':confused:',':hushed:',':expressionless:',':unamused:',':sweat_smile:',':sweat:',':weary:',':pensive:',':disappointed:',':confounded:',':fearful:',':cold_sweat:',':persevere:',':cry:',':sob:',':joy:',':astonished:',':scream:',':neckbeard:',':tired_face:',':angry:',':rage:',':triumph:',':sleepy:',':yum:',':mask:',':sunglasses:',':dizzy_face:',':imp:',':smiling_imp:',':neutral_face:',':no_mouth:',':innocent:',':alien:',':yellow_heart:',':blue_heart:',':purple_heart:',':heart:',':green_heart:',':broken_heart:',':heartbeat:',':heartpulse:',':two_hearts:',':revolving_hearts:',':cupid:',':sparkling_heart:',':sparkles:',':star:',':star2:',':dizzy:',':boom:',':anger:',':exclamation:',':question:',':grey_exclamation:',':grey_question:',':zzz:',':dash:',':sweat_drops:',':notes:',':musical_note:',':fire:',':poop:',':+1:',':-1:',':ok_hand:',':punch:',':facepunch:',':fist:',':v:',':wave:',':hand:',':open_hands:',':point_up:',':point_down:',':point_left:',':point_right:',':raised_hands:',':pray:',':point_up_2:',':clap:',':muscle:',':metal:',':walking:',':running:',':couple:',':family:',':two_men_holding_hands:',':two_women_holding_hands:',':dancer:',':dancers:',':ok_woman:',':no_good:',':information_desk_person:',':raised_hand:',':bride_with_veil:',':person_with_pouting_face:',':person_frowning:',':bow:',':couplekiss:',':couple_with_heart:',':massage:',':haircut:',':nail_care:',':boy:',':girl:',':woman:',':man:',':baby:',':older_woman:',':older_man:',':person_with_blond_hair:',':man_with_gua_pi_mao:',':man_with_turban:',':construction_worker:',':cop:',':angel:',':princess:',':smiley_cat:',':smile_cat:',':heart_eyes_cat:',':kissing_cat:',':smirk_cat:',':scream_cat:',':crying_cat_face:',':joy_cat:',':pouting_cat:',':japanese_ogre:',':japanese_goblin:',':see_no_evil:',':hear_no_evil:',':speak_no_evil:',':guardsman:',':skull:',':feet:',':lips:',':kiss:',':droplet:',':ear:',':eyes:',':nose:',':tongue:',':love_letter:',':bust_in_silhouette:',':busts_in_silhouette:',':speech_balloon:',':thought_balloon:',':feelsgood:',':finnadie:',':goberserk:',':godmode:',':hurtrealbad:',':rage1:',':rage2:',':rage3:',':rage4:',':suspect:',':trollface:',':sunny:',':umbrella:',':cloud:',':snowflake:',':snowman:',':zap:',':cyclone:',':foggy:',':ocean:',':cat:',':dog:',':mouse:',':hamster:',':rabbit:',':wolf:',':frog:',':tiger:',':koala:',':bear:',':pig:',':pig_nose:',':cow:',':boar:',':monkey_face:',':monkey:',':horse:',':racehorse:',':camel:',':sheep:',':elephant:',':panda_face:',':snake:',':bird:',':baby_chick:',':hatched_chick:',':hatching_chick:',':chicken:',':penguin:',':turtle:',':bug:',':honeybee:',':ant:',':beetle:',':snail:',':octopus:',':tropical_fish:',':fish:',':whale:',':whale2:',':dolphin:',':cow2:',':ram:',':rat:',':water_buffalo:',':tiger2:',':rabbit2:',':dragon:',':goat:',':rooster:',':dog2:',':pig2:',':mouse2:',':ox:',':dragon_face:',':blowfish:',':crocodile:',':dromedary_camel:',':leopard:',':cat2:',':poodle:',':paw_prints:',':bouquet:',':cherry_blossom:',':tulip:',':four_leaf_clover:',':rose:',':sunflower:',':hibiscus:',':maple_leaf:',':leaves:',':fallen_leaf:',':herb:',':mushroom:',':cactus:',':palm_tree:',':evergreen_tree:',':deciduous_tree:',':chestnut:',':seedling:',':blossom:',':ear_of_rice:',':shell:',':globe_with_meridians:',':sun_with_face:',':full_moon_with_face:',':new_moon_with_face:',':new_moon:',':waxing_crescent_moon:',':first_quarter_moon:',':waxing_gibbous_moon:',':full_moon:',':waning_gibbous_moon:',':last_quarter_moon:',':waning_crescent_moon:',':last_quarter_moon_with_face:',':first_quarter_moon_with_face:',':moon:',':earth_africa:',':earth_americas:',':earth_asia:',':volcano:',':milky_way:',':partly_sunny:',':octocat:',':squirrel:',':bamboo:',':gift_heart:',':dolls:',':school_satchel:',':mortar_board:',':flags:',':fireworks:',':sparkler:',':wind_chime:',':rice_scene:',':jack_o_lantern:',':ghost:',':santa:',':christmas_tree:',':gift:',':bell:',':no_bell:',':tanabata_tree:',':tada:',':confetti_ball:',':balloon:',':crystal_ball:',':cd:',':dvd:',':floppy_disk:',':camera:',':video_camera:',':movie_camera:',':computer:',':tv:',':iphone:',':phone:',':telephone_receiver:',':pager:',':fax:',':minidisc:',':vhs:',':sound:',':speaker:',':mute:',':loudspeaker:',':mega:',':hourglass:',':hourglass_flowing_sand:',':alarm_clock:',':watch:',':radio:',':satellite:',':loop:',':mag:',':mag_right:',':unlock:',':lock:',':lock_with_ink_pen:',':closed_lock_with_key:',':key:',':bulb:',':flashlight:',':high_brightness:',':low_brightness:',':electric_plug:',':battery:',':calling:',':email:',':mailbox:',':postbox:',':bath:',':shower:',':toilet:',':wrench:',':nut_and_bolt:',':hammer:',':seat:',':moneybag:',':yen:',':dollar:',':pound:',':euro:',':credit_card:',':money_with_wings:',':e-mail:',':inbox_tray:',':outbox_tray:',':envelope:',':incoming_envelope:',':postal_horn:',':mailbox_closed:',':mailbox_with_mail:',':mailbox_with_no_mail:',':door:',':smoking:',':bomb:',':gun:',':hocho:',':pill:',':syringe:',':page_facing_up:',':page_with_curl:',':bookmark_tabs:',':bar_chart:',':chart_with_upwards_trend:',':chart_with_downwards_trend:',':scroll:',':clipboard:',':calendar:',':date:',':card_index:',':file_folder:',':open_file_folder:',':scissors:',':pushpin:',':paperclip:',':black_nib:',':pencil2:',':straight_ruler:',':triangular_ruler:',':closed_book:',':green_book:',':blue_book:',':orange_book:',':notebook:',':notebook_with_decorative_cover:',':ledger:',':books:',':bookmark:',':name_badge:',':microscope:',':telescope:',':newspaper:',':football:',':basketball:',':soccer:',':baseball:',':tennis:',':8ball:',':rugby_football:',':bowling:',':golf:',':mountain_bicyclist:',':bicyclist:',':horse_racing:',':snowboarder:',':swimmer:',':surfer:',':ski:',':spades:',':hearts:',':clubs:',':diamonds:',':gem:',':ring:',':trophy:',':musical_score:',':musical_keyboard:',':violin:',':space_invader:',':video_game:',':black_joker:',':flower_playing_cards:',':game_die:',':dart:',':mahjong:',':clapper:',':memo:',':book:',':art:',':microphone:',':headphones:',':trumpet:',':saxophone:',':guitar:',':shoe:',':sandal:',':high_heel:',':lipstick:',':boot:',':shirt:',':necktie:',':womans_clothes:',':dress:',':running_shirt_with_sash:',':jeans:',':kimono:',':bikini:',':ribbon:',':tophat:',':crown:',':womans_hat:',':mans_shoe:',':closed_umbrella:',':briefcase:',':handbag:',':pouch:',':purse:',':eyeglasses:',':fishing_pole_and_fish:',':coffee:',':tea:',':sake:',':baby_bottle:',':beer:',':beers:',':cocktail:',':tropical_drink:',':wine_glass:',':fork_and_knife:',':pizza:',':hamburger:',':fries:',':poultry_leg:',':meat_on_bone:',':spaghetti:',':curry:',':fried_shrimp:',':bento:',':sushi:',':fish_cake:',':rice_ball:',':rice_cracker:',':rice:',':ramen:',':stew:',':oden:',':dango:',':egg:',':bread:',':doughnut:',':custard:',':icecream:',':ice_cream:',':shaved_ice:',':birthday:',':cake:',':cookie:',':chocolate_bar:',':candy:',':lollipop:',':honey_pot:',':apple:',':green_apple:',':tangerine:',':lemon:',':cherries:',':grapes:',':watermelon:',':strawberry:',':peach:',':melon:',':banana:',':pear:',':pineapple:',':sweet_potato:',':eggplant:',':tomato:',':corn:',':109:',':house:',':house_with_garden:',':school:',':office:',':post_office:',':hospital:',':bank:',':convenience_store:',':love_hotel:',':hotel:',':wedding:',':church:',':department_store:',':european_post_office:',':city_sunrise:',':city_sunset:',':japanese_castle:',':european_castle:',':tent:',':factory:',':tokyo_tower:',':japan:',':mount_fuji:',':sunrise_over_mountains:',':sunrise:',':stars:',':statue_of_liberty:',':bridge_at_night:',':carousel_horse:',':rainbow:',':ferris_wheel:',':fountain:',':roller_coaster:',':ship:',':speedboat:',':boat:',':rowboat:',':anchor:',':rocket:',':airplane:',':helicopter:',':steam_locomotive:',':tram:',':mountain_railway:',':bike:',':aerial_tramway:',':suspension_railway:',':mountain_cableway:',':tractor:',':blue_car:',':oncoming_automobile:',':car:',':taxi:',':oncoming_taxi:',':articulated_lorry:',':bus:',':oncoming_bus:',':rotating_light:',':police_car:',':oncoming_police_car:',':fire_engine:',':ambulance:',':minibus:',':truck:',':train:',':station:',':train2:',':bullettrain_side:',':light_rail:',':monorail:',':railway_car:',':trolleybus:',':ticket:',':fuelpump:',':vertical_traffic_light:',':traffic_light:',':warning:',':construction:',':beginner:',':atm:',':slot_machine:',':busstop:',':barber:',':hotsprings:',':checkered_flag:',':crossed_flags:',':izakaya_lantern:',':moyai:',':circus_tent:',':performing_arts:',':round_pushpin:',':triangular_flag_on_post:',':jp:',':kr:',':cn:',':us:',':fr:',':es:',':it:',':ru:',':uk:',':de:',':one:',':two:',':three:',':four:',':five:',':six:',':seven:',':eight:',':nine:',':keycap_ten:',':1234:',':zero:',':hash:',':symbols:',':arrow_backward:',':arrow_down:',':arrow_forward:',':arrow_left:',':capital_abcd:',':abcd:',':abc:',':arrow_lower_left:',':arrow_lower_right:',':arrow_right:',':arrow_up:',':arrow_upper_left:',':arrow_upper_right:',':arrow_double_down:',':arrow_double_up:',':arrow_down_small:',':arrow_heading_down:',':arrow_heading_up:',':leftwards_arrow_with_hook:',':arrow_right_hook:',':left_right_arrow:',':arrow_up_down:',':arrow_up_small:',':arrows_clockwise:',':arrows_counterclockwise:',':rewind:',':fast_forward:',':information_source:',':ok:',':twisted_rightwards_arrows:',':repeat:',':repeat_one:',':new:',':top:',':up:',':cool:',':free:',':ng:',':cinema:',':koko:',':signal_strength:',':u5272:',':u5408:',':u55b6:',':u6307:',':u6708:',':u6709:',':u6e80:',':u7121:',':u7533:',':u7a7a:',':u7981:',':sa:',':restroom:',':mens:',':womens:',':baby_symbol:',':no_smoking:',':parking:',':wheelchair:',':metro:',':baggage_claim:',':accept:',':wc:',':potable_water:',':put_litter_in_its_place:',':secret:',':congratulations:',':m:',':passport_control:',':left_luggage:',':customs:',':ideograph_advantage:',':cl:',':sos:',':id:',':no_entry_sign:',':underage:',':no_mobile_phones:',':do_not_litter:',':non-potable_water:',':no_bicycles:',':no_pedestrians:',':children_crossing:',':no_entry:',':eight_spoked_asterisk:',':eight_pointed_black_star:',':heart_decoration:',':vs:',':vibration_mode:',':mobile_phone_off:',':chart:',':currency_exchange:',':aries:',':taurus:',':gemini:',':cancer:',':leo:',':virgo:',':libra:',':scorpius:',':sagittarius:',':capricorn:',':aquarius:',':pisces:',':ophiuchus:',':six_pointed_star:',':negative_squared_cross_mark:',':a:',':b:',':ab:',':o2:',':diamond_shape_with_a_dot_inside:',':recycle:',':end:',':on:',':soon:',':clock1:',':clock130:',':clock10:',':clock1030:',':clock11:',':clock1130:',':clock12:',':clock1230:',':clock2:',':clock230:',':clock3:',':clock330:',':clock4:',':clock430:',':clock5:',':clock530:',':clock6:',':clock630:',':clock7:',':clock730:',':clock8:',':clock830:',':clock9:',':clock930:',':heavy_dollar_sign:',':copyright:',':registered:',':tm:',':x:',':heavy_exclamation_mark:',':bangbang:',':interrobang:',':o:',':heavy_multiplication_x:',':heavy_plus_sign:',':heavy_minus_sign:',':heavy_division_sign:',':white_flower:',':100:',':heavy_check_mark:',':ballot_box_with_check:',':radio_button:',':link:',':curly_loop:',':wavy_dash:',':part_alternation_mark:',':trident:',':black_square:',':white_square:',':white_check_mark:',':black_square_button:',':white_square_button:',':black_circle:',':white_circle:',':red_circle:',':large_blue_circle:',':large_blue_diamond:',':large_orange_diamond:',':small_blue_diamond:',':small_orange_diamond:',':small_red_triangle:',':small_red_triangle_down:']

  };

  ttEm.init();

})();